package com.jielin.handling.service.xsky;

import com.amazonaws.SdkClientException;
import com.amazonaws.services.s3.model.ObjectMetadata;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;

public interface XskyService {
    //上传对象
    public void uploadObject(String bucketName, String key, File file);

    /**
     * 新增对象（文件夹）
     *
     * @param bucketName 桶名称
     * @param key        对象名
     * @param content    要编码的字符串
     */
    public void uploadObject(String bucketName, String key, String content);

    /**
     * 新增对象
     *
     * @param bucketName 桶名称
     * @param key        对象名
     * @param file       文件
     * @throws SdkClientException
     */
    public void uploadObjectThrows(String bucketName, String key, File file) throws SdkClientException;

    /**
     * 新增对象
     *
     * @param bucketName 桶名称
     * @param key        对象名
     * @param bytes      文件数据
     * @param metadata   对象元数据。 在最小这指定数据流的内容长度被上传
     */
    public void uploadObjectForInputStream(String bucketName, String key, byte[] bytes,
                                           ObjectMetadata metadata) throws SdkClientException;

    /**
     * 新增对象
     *
     * @param bucketName  桶名称
     * @param key         对象名
     * @param inputStream 输入流
     * @param metadata    对象元数据。 在最小这指定数据流的内容长度被上传
     */
    public void uploadObjectForInputStream(String bucketName, String key, InputStream inputStream,
                                           ObjectMetadata metadata) throws SdkClientException;

    //下载对象
    public void downloadObject(String bucketName, String key, String newFile);

    /**
     * 下载对象
     *
     * @param bucketName 桶名称
     * @param key        对象名
     * @param newFile    地址
     */
    public void downloadObjectThrows(String bucketName, String key, String newFile) throws SdkClientException, IOException;

    //删除对象
    public void deleteObject(String bucketName, String key);

    /**
     * 复制对象
     *
     * @param sourceBucketName      源桶名称
     * @param sourceKey             源对象名
     * @param destinationBucketName 新桶名称
     * @param destinationKey        新对象名
     * @param metadata              对象元数据
     * @throws SdkClientException
     */
    public void copyObject(String sourceBucketName, String sourceKey, String destinationBucketName, String destinationKey, ObjectMetadata metadata) throws SdkClientException;

}